VFPRINTF - VSPRINTF

                   
#include <stdio.h>
#include <varargs.h>    требуется  для совместимости с UNIX V.
            
#include <stdarg.h>     требуется для совместимости со стандартом ANSI C.
            
int vfprintf(stream, format-string, arg-ptr);
int vprintf(format-string, arg-ptr);
int vsprintf(buffer, format-string, arg-ptr);
            
FILE *stream;            указатель на  структуру  типа FILE.
char *buffer;            память  для  хранения результата
char *format-string;     строка управления форматом
va_list arg-ptr;         указатель   на  список  аргументов.

Описание.
Функции vfprintf, vprintf, vsprintf форматируют и выводят данные соответственно в поток stream, поток стандартного вывода и буфер buffer. Эти функции похожи на свои двойники fprintf, printf, sprintf, но используют указатель на список аргументов вместо списка аргументов.
Format-string имеет ту же самую форму и функцию, что и аргумент строки формата для функции printf; (см. описание функции printf).
Параметр arg-ptr имеет тип va_list, определяемый в <vararg.h> и <stdarg.h>. Этот параметр указывает на список аргументов, которые преобразовываются и выводятся согласно соответствующим спецификациям формата в format-string.

Возвращаемое значение.
Возвращаемым значением является количество выведенных символов.

Пример:
В качестве примера приводится листинг программы, использующей <varargs.h> для совместимости с UNIX V.

            
            #include <stdio.h>
            #include <varargs.h>
            
            main ()
            {
            int line = 1;
      
            char *filename = "EXAMPLE";
            .
            .
            .
            error("Error: line %d, file %s\n", line, filename);
            .
            .
            .
            error("Syntax error\n");
            }
            
            error(va_alist);
            va_dcl;
            {
               char *fmt;
               va_list arg_ptr;
            
                 va_start(arg_ptr);
               /* arg_ptr сейчас указывает на строку формата */
                 fmt = va_arg(arg_ptr, char *);
               /* arg_ptr сейчас указывает на аргумент после строки форма-
         та */
                 vprintf(fmt, arg_ptr);
                 va_end(arg_ptr);
            }
            

На выходе:

            
            Error: line 1, file EXAMPLE
            Syntax error.
            

Ниже приводится аналогичная программа, перезаписанная для совместимости со стандартом ANSI C.

            #include <stdio.h>
            #include <stdarg.h>
            
            main ()
            {
            int line = 1;
            char *filename = "EXAMPLE";
            .
            .
            .
            error("Error: line %d, file %s\n", line, filename);
            .
            .
            .
            error("Syntax error\n");
            }
            
            error(fmt);
            char *fmt;
            {
               va_list arg_ptr;
               va_start(arg_ptr, fmt);
      
      
               /* arg_ptr сейчас указывает на аргумент после строки форма-
         та */
                 vprintf(fmt, arg_ptr);
                 va_end(arg_ptr);
            }

На выходе:

            Error: line 1, file EXAMPLE
            Syntax error.
            
Hosted by uCoz